package editorsvg.editor.atributos;

import editorsvg.editor.documento.AjustesGraficos;
import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.PropiedadPintura;
import editorsvg.propiedades.PropiedadDouble;
import java.awt.BasicStroke;

/**
 *
 * @author Jorge Berjano
 */
public class AtrEstilo extends MetaAtributo {

    private AtrPintura fill = new AtrPintura();
    private AtrPintura stroke = new AtrPintura();
    private AtrLongitud strokeWidth = new AtrLongitud();
    private AtrDouble fillOpacity = new AtrDouble();
    private AtrDouble strokeOpacity = new AtrDouble();
            
    private static GrupoPropiedades propiedadesEstilo;

    public AtrEstilo() {
//        fill.setRgb(0);
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        AtrEstilo clon = (AtrEstilo) super.clone();
        clon.fill = (AtrPintura) fill.clone();
        clon.stroke = (AtrPintura) stroke.clone();
        clon.strokeWidth = (AtrLongitud) strokeWidth.clone();
        clon.fillOpacity = (AtrDouble) fillOpacity.clone();
        clon.strokeOpacity = (AtrDouble) strokeOpacity.clone();
        return clon;
    }

    public void establecerAjustes(AjustesGraficos ajustes) {
           
        if (fill.getValor() != null || fill.isNone()) {               
            ajustes.setPinturaRelleno(fill.isNone() ? null : fill.getValor());
        }
        if (stroke.getValor() != null || stroke.isNone()) {
            ajustes.setPinturaTrazo(stroke.isNone() ? null : stroke.getValor());
        }
        if (strokeWidth.getValor() != null) {
            float grosorTrazo = strokeWidth.getValor().floatValue();
            if (grosorTrazo >= 0) {
                ajustes.setTrazo(new BasicStroke(grosorTrazo));
            }
        }
        if (fillOpacity.getValor() != null) {
            ajustes.setOpacidadRelleno(fillOpacity.getValor());
        }
        if (strokeOpacity.getValor() != null) {
            ajustes.setOpacidadTrazo(strokeOpacity.getValor());
        }
    }

    public AtrPintura fill() {
        return fill;
    }

    public AtrPintura stroke() {
        return stroke;
    }
    
    public AtrLongitud strokeWidth() {
        return strokeWidth;
    }

    public AtrDouble fillOpacity() {
        return fillOpacity;
    }

    public AtrDouble strokeOpacity() {
        return strokeOpacity;
    }

    public GrupoPropiedades obtenerPropiedades() {
        if (propiedadesEstilo == null) {
            propiedadesEstilo = new GrupoPropiedades("Estilo");
            propiedadesEstilo.agregarPropiedad(new PropiedadPintura("stroke", "stroke"));
            propiedadesEstilo.agregarPropiedad(new PropiedadPintura("fill", "fill"));
            propiedadesEstilo.agregarPropiedad(new PropiedadDouble("strokeWidth", "stroke-width"));
            propiedadesEstilo.agregarPropiedad(new PropiedadDouble("strokeOpacity", "stroke-opacity"));
            propiedadesEstilo.agregarPropiedad(new PropiedadDouble("fillOpacity", "fill-opacity"));
        }
        return propiedadesEstilo;
    }

}
